home *** CD-ROM | disk | FTP | other *** search
- /*
- DU_LIB v2
- Gem Window Management & Dialog Library For Lattice C
- ©1994, by Craig Graham.
-
- Based on the DU_LIBv1 Library for HiSoft Basic.
- */
-
- /*
- Event & object handling
- */
-
- #include "dulib.h"
-
- #define KEY_CODES -1
- #define DIALOG_LAYER_KEY_HANDLER -2
-
- event Get_object_event(short dialog, short ob)
- {
- Elist *e;
-
- e=NULL;
-
- if (find_event(dialog,ob,&e))
- {
- return e->this_event;
- }else{
- return 0;
- }
- }
-
- short Set_object_event(short dialog, short ob, event e)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(dialog,ob,&n))
- n=new_event_struct(dialog,ob);
-
- n->this_event=e;
-
- return 0;
- }
-
- event Get_object_devent(short dialog, short ob)
- {
- Elist *e;
-
- e=NULL;
-
- if (find_event(dialog,ob,&e))
- {
- return e->this_devent;
- }else{
- return 0;
- }
- }
-
- short Set_object_devent(short dialog, short ob, event e)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(dialog,ob,&n))
- n=new_event_struct(dialog,ob);
-
- n->this_devent=e;
-
- return 0;
- }
-
- CallBack Get_object_callback(short dialog, short ob)
- {
- Elist *e;
- e=NULL;
-
- if (find_event(dialog,ob,&e))
- {
- return e->callback;
- }else{
- return 0;
- }
- }
-
- short Set_object_callback(short dialog, short ob, CallBack c)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(dialog,ob,&n))
- n=new_event_struct(dialog,ob);
-
- n->callback=c;
-
- return 0;
- }
-
- CallBack Get_object_dcallback(short dialog, short ob)
- {
- Elist *e;
- e=NULL;
-
- if (find_event(dialog,ob,&e))
- {
- return e->dcallback;
- }else{
- return 0;
- }
- }
-
- short Set_object_dcallback(short dialog, short ob, CallBack c)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(dialog,ob,&n))
- n=new_event_struct(dialog,ob);
-
- n->dcallback=c;
-
- return 0;
- }
-
- /*
- Keyboard Processing Callbacks
- */
-
- /* Specific Object Keyboard callbacks (Object Layer) */
- CallBack Get_object_Kcallback(short dialog, short ob)
- {
- Elist *e;
- e=NULL;
-
- if (find_event(dialog,ob,&e))
- {
- return e->Kcallback;
- }else{
- return 0;
- }
- }
-
- short Set_object_Kcallback(short dialog, short ob, CallBack c)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(dialog,ob,&n))
- n=new_event_struct(dialog,ob);
-
- n->Kcallback=c;
-
- return 0;
- }
-
- /* Dialog related Callbacks (Dialog Layer) */
- CallBack Get_dialog_Kcallback(short dialog)
- {
- Elist *e;
- e=NULL;
-
- if (find_event(dialog,DIALOG_LAYER_KEY_HANDLER,&e))
- {
- return e->Kcallback;
- }else{
- return 0;
- }
- }
-
- short Set_dialog_Kcallback(short dialog, CallBack c)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(dialog, DIALOG_LAYER_KEY_HANDLER, &n))
- n=new_event_struct(dialog, DIALOG_LAYER_KEY_HANDLER);
-
- n->Kcallback=c;
-
- return 0;
- }
-
- /* Key specific keyboard callbacks. (Application Global Layer) */
- CallBack Get_key_callback(short key)
- {
- Elist *e;
- e=NULL;
-
- if (find_event(KEY_CODES,key,&e))
- {
- return e->Kcallback;
- }else{
- return 0;
- }
- }
-
- short Set_key_callback(short key, CallBack c)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(KEY_CODES,key,&n))
- n=new_event_struct(KEY_CODES,key);
-
- n->Kcallback=c;
-
- return 0;
- }
-
- /*
- REDRAW FUNCTIONS
- */
- CallBack Get_object_redraw(short dialog, short ob)
- {
- Elist *e;
- e=NULL;
-
- if (find_event(dialog,ob,&e))
- {
- return e->redraw;
- }else{
- return 0;
- }
- }
-
- short Set_object_redraw(short dialog, short ob, CallBack c)
- {
- Elist *n;
- n=NULL;
-
- if (!find_event(dialog,ob,&n))
- n=new_event_struct(dialog,ob);
-
- n->redraw=c;
-
- return 0;
- }
-
- /*
- Support function for searching & inserting in the event/callback tables
- */
- short find_event(short dialog, short ob, Elist *ee[])
- {
- short o;
- Elist *e;
-
- o=ob-1;
- if (dialog!=KEY_CODES)
- e=event_value[dialog];
- else
- e=key_values;
-
- if (e!=NULL)
- {
- for(o=e->object; (e!=NULL)&&(o!=ob); )
- {
- o=e->object;
- if (o!=ob) { e=e->next; }
- }
- }
-
- ee[0]=e;
-
- if (o!=ob)
- {
- return 0;
- } else {
- return 1;
- }
- }
-
- /*
- Create a new event structure for an object & initialise it to all disabled
- */
- Elist* new_event_struct(short dialog, short ob)
- {
- Elist *n;
-
- n=(Elist*)malloc(sizeof(Elist));
-
- if (dialog!=KEY_CODES)
- {
- n->object=ob;
- n->next=event_value[dialog];
- event_value[dialog]=n;
- }else{
- n->object=ob; // for key codes, AES key code is passed in ob.
- n->next=key_values;
- key_values=n;
- }
-
- /* Initially, nothing actually in the event structure */
- n->this_event=0; // Single click event
- n->this_devent=0; // Double click event
- n->callback=NULL; // Single click callback
- n->dcallback=NULL; // Double click callback
- n->redraw=NULL; // Redraw callback function
- n->Kcallback=NULL; // Keyboard callback
- n->stext.texts=NULL; // Scroll text
- n->wtext.text=NULL; // Text widget
- n->wtext.current_line=NULL;
- n->wtext.display_baseline=NULL;
- n->popup_form=0; // Icon popup
- n->popup_icon_current=0; // Icon popup current icon
-
- return n;
- }
-